<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <meta name="viewport" content="width=device-width, initial-scale=1.0">
    <title>apply_call</title>
</head>
<body>
    <button message="后盾人">button</button>
    <button message="hdcmc">button</button>
</body>
</html>
<script>
    //默认this 是一个空对象，然后使用后早函数处理后就把这个空对象变的有值
    //默认是window对象  this指向window对象
    // function User(name){
    //     this.name = name;
    //     console.log(this)
    // }

    //改变了this的指针，将原本的window对象修改为User对象
    // let hd = new User("后盾人");

    //可以改变构造函数中的空对象，即让构造函数this指向另外一个对象
    // function User(name,age){
    //     this.name = name;
    //     this.age = age;
    // }

    // let hdcms = {};
    // //这里需要注意的是 引用类型是可以改变的
    // User.call(hdcms,"HDCMS",25);
    // console.log(hdcms.name)

    //apply使用数组传递
    //call需要分别传递参数
    //和bind 不一样的是  apply/call  会立即执行

    // function show(title){
    //     alert(`${title + this.name}`);
    // }

    // let lisi = {
    //     name : '李四'
    // };
    // let wangwu = {
    //     name : '王五'
    // };
    // show.call(lisi,'后盾人');
    // show.apply(wangwu,['hdcms']);

    //js 在执行代码之前  都会吧代码捋一遍
    
    //使用call设置函数的上下文
    // function show(){
    //     alert(this.getAttribute('message'));
    // }
    // let bts = document.getElementsByTagName('button');
    // for(let i = 0 ; i < bts.length ; i++){
    //     bts[i].addEventListener('click',() => show.call(bts[i]));
    // }
    
    //使用  show.apply()  将bts[i]也就是每个按钮额DOM节点对象给show   
    //改变了show的this指针为当前的DOM对象，apply会立即执行
    // for(let i = 0 ; i < bts.length ; i++){
    //     bts[i].addEventListener('click',() => show.apply(bts[i]));
    // }


    //查找数组的最大值
    // let arr = [1,3,4,8];
    // console.log(Math.max(...arr));
    // console.log(Math.max.apply(Math,arr));

    



    

</script>